package com.boilermaker.lotterysystem.service.impl;

import com.boilermaker.lotterysystem.common.errorcode.ServiceErrorCodeConstants;
import com.boilermaker.lotterysystem.common.exception.ServiceException;
import com.boilermaker.lotterysystem.service.PictureService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * 创建奖品时，为奖品添加图片
 */
@Component
public class PictureServiceImpl implements PictureService {

    /**
     * 图片存储路径
     */
    @Value("${pic.local-path}")
    private String localPath;

    /**
     * 保存图片到本地受管控的目录
     *
     * @param picture
     * @return
     */
    @Override
    public String savePicture(MultipartFile picture) {

        // 创建图片存储路径
        File dir = new File(localPath);

        if (!dir.exists()) {
            boolean ok = dir.mkdirs();
            if (!ok) {
                throw new ServiceException(ServiceErrorCodeConstants.PIC_MAKE_DIR_ERROR);
            }
        }

        // 更改文件名
        String originalFilename = picture.getOriginalFilename(); // 获取源文件路径

        String suffix = originalFilename.substring(originalFilename.lastIndexOf(".")); // 获取后缀

        // 可以在此处校验后缀，限制图片上传格式

        String newFilename = UUID.randomUUID() + suffix; // 使用随机生成的 UUID 拼接后缀，防止重名

        // 保存图片到刚刚创建的路径
        try {
            picture.transferTo(new File(localPath + "/" + newFilename));
        } catch (IOException e) {
            throw new ServiceException(ServiceErrorCodeConstants.PIC_UPLOAD_ERROR);
        }

        return newFilename;
    }
}
